/*@author cerimice*/
package Dialogos.Entidad;

import Dialogos.Modal.Entidad.Cliente.BuscarClienteDlg;
import Logica.Dialogo.Entidad.CartuchoLogica;
import Persistencia.Definicion.Cartucho;
import Sistema.Configuracion;
import cerimice.ComboLista;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.Notification;
import com.vaadin.ui.themes.BaseTheme;
import java.util.logging.Logger;

public class CartuchoDlg extends Panel
    {
    private CartuchoLogica logica;
    
    private Label       label0;
    
    private Table       tabla;
    private TextField   buscar,clave,cliente,modeloImpresora,modeloCartucho,numeroSerie,nombreCliente,telefonoFijoCliente,telefonoMovilCliente;
    private ComboLista  marca;
    private Button      mostrar,modificar,agregar,seleccionCliente;
    
    public CartuchoDlg()
        {
        super();
        iniciarComponente();
        }
    
    private void iniciarComponente()
        {
        logica          = new CartuchoLogica();
        
        buscar          = new TextField("Proporcione clave a buscar");
            buscar.setWidth("500px");
        clave           = new TextField("Clave");
            clave.setEnabled(false);
        cliente         = new TextField("Cliente");
            cliente.setEnabled(false);
        nombreCliente   = new TextField("nombre");
            nombreCliente.setEnabled(false);
        telefonoFijoCliente = new TextField("Telefono Fijo");
            telefonoFijoCliente.setEnabled(false);
        telefonoMovilCliente    = new TextField("Telefono Movil");
            telefonoMovilCliente.setEnabled(false);
        modeloImpresora = new TextField("Modelo Impresora");
        modeloCartucho  = new TextField("Modelo Cartucho");
        numeroSerie     = new TextField("Numero de Serie");
        mostrar         = new Button("Mostrar");
            mostrar.setWidth("100px");
        marca = new ComboLista("Marca");
        modificar = new Button("Modificar");
        agregar = new Button("Agregar");
        seleccionCliente = new Button();
            seleccionCliente.setWidth("50px");
            seleccionCliente.setIcon(new ThemeResource("icons/personal/iconoBuscar.png"));
            seleccionCliente.setStyleName(BaseTheme.BUTTON_LINK);
            seleccionCliente.addListener(new Button.ClickListener()  {@Override public void buttonClick(Button.ClickEvent event){buscarCliente();}});
        tabla       = new Table("Listado de Cartuchos");
            tabla.addListener(new Property.ValueChangeListener()    {@Override public void valueChange(ValueChangeEvent event) {cargarInformacionSeleccionado();}});
            tabla.setNullSelectionAllowed(false);
            tabla.setSelectable(true);
            tabla.setImmediate(true);
            tabla.addContainerProperty("CLAVE",String.class,"");
            tabla.addContainerProperty("CLIENTE",String.class,"");
            tabla.addContainerProperty("MARCA",String.class,"");
            tabla.addContainerProperty("MODELO CARTUCHO",String.class,"");
            tabla.setColumnWidth("CLAVE",100);
            tabla.setColumnWidth("CLIENTE",200);
            tabla.setColumnWidth("MARCA",100);
            tabla.setColumnWidth("MODELO CARTUCHO",100);
            tabla.setWidth("600px");
            
        try
            {marca.addListItems(logica.getListaMarca());}
        catch (Exception ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());}
        
        mostrar.addListener(new Button.ClickListener()  {@Override public void buttonClick(Button.ClickEvent event){cargarTabla();}});
        agregar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){agregarInformacion();}});
        modificar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){modificarInformacionSeleccionado();}});
        
        HorizontalLayout layout = new HorizontalLayout();
            layout.setWidth("1000px");
            VerticalLayout busqueda = new VerticalLayout();
                busqueda.setWidth("600px");
                HorizontalLayout datosBuscar = new HorizontalLayout();
                    datosBuscar.addComponent(buscar);
                    datosBuscar.addComponent(mostrar);
                busqueda.addComponent(datosBuscar);
                busqueda.addComponent(tabla);
                busqueda.setComponentAlignment(datosBuscar, Alignment.TOP_CENTER);
                busqueda.setComponentAlignment(tabla, Alignment.TOP_CENTER);
            VerticalLayout datos = new VerticalLayout();
                VerticalLayout datosCartucho = new VerticalLayout();
                    datosCartucho.setCaption("Datos del Cartucho");
                    datosCartucho.addComponent(clave);
                    VerticalLayout datosCliente = new VerticalLayout();
                        datosCliente.setCaption("Datos del Cliente");
                            HorizontalLayout buscarCliente = new HorizontalLayout();
                                buscarCliente.addComponent(cliente);
                                buscarCliente.addComponent(seleccionCliente);
                            datosCliente.addComponent(buscarCliente);
                            datosCliente.addComponent(nombreCliente);
                            datosCliente.addComponent(telefonoFijoCliente);
                            datosCliente.addComponent(telefonoMovilCliente);
                        datosCartucho.addComponent(datosCliente);
                        datosCartucho.addComponent(marca);
                        datosCartucho.addComponent(modeloImpresora);
                        datosCartucho.addComponent(modeloCartucho);
                        datosCartucho.addComponent(numeroSerie);
                    HorizontalLayout operaciones = new HorizontalLayout();
                        operaciones.addComponent(modificar);
                        operaciones.addComponent(agregar);
                datos.addComponent(datosCartucho);
                datos.addComponent(operaciones);
                
            layout.addComponent(busqueda);
            layout.addComponent(datos);
            layout.setComponentAlignment(busqueda, Alignment.TOP_CENTER);
            layout.setComponentAlignment(datos, Alignment.TOP_CENTER);
        this.addComponent(layout);
        this.setCaption("CATALOGO DE "+logica.getTitulo().toUpperCase());
        this.setIcon(new ThemeResource("icons/personal/cartuchoTinta.png"));
        
        cargarTabla();
        }
    
    private void buscarCliente()
        {
        getWindow().addWindow(new BuscarClienteDlg("Busqueda de Cliente",cliente,nombreCliente,telefonoFijoCliente,telefonoMovilCliente));
        String cli = (String)cliente.getValue();
        if(cliente.equals("")){return;}
        }
    
    private void cargarTabla()
        {
        try
            {this.tabla = logica.generarTabla((String)buscar.getValue(),this.tabla);}
        catch (Exception ex)
            {
            /*getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>"+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);*/
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        }
    
    private void cargarInformacionSeleccionado()
        {
        agregar.setEnabled(false);
        String clv = tabla.getValue().toString();
        try
            {
            Cartucho obj = logica.obtenerObjeto(clv);
            clave.setValue(obj.getClave());
            cliente.setValue(obj.getObjCliente().getClave());
                nombreCliente.setValue(obj.getObjCliente().getNombreCompleto());
                telefonoFijoCliente.setValue(obj.getObjCliente().getTelefonoFijo());
                telefonoMovilCliente.setValue(obj.getObjCliente().getTelefonoMovil());
            marca.setSelectedKey(obj.getMarca());
            modeloImpresora.setValue(obj.getModeloImpresora());
            modeloCartucho.setValue(obj.getModeloCartucho());
            numeroSerie.setValue(obj.getNumeroSerie());
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    
    private void modificarInformacionSeleccionado()
        {
        if(tabla.getValue()==null){{getWindow().showNotification("Aviso...","Por favor selecciona un elemento de la tabla",Notification.TYPE_WARNING_MESSAGE);} return;}
        String clv = tabla.getValue().toString();
        try
            {
            String claveDts             = (String)clave.getValue();
            String clienteDts           = (String)cliente.getValue();
            String marcaDts             =  marca.getSelectedKey();
            String modeloImpresoraDts   = (String)modeloImpresora.getValue();
            String modeloCartuchoDts    = (String)modeloCartucho.getValue();
            String numeroSerieDts       = (String)numeroSerie.getValue();
            
            if(logica.modificarObjeto(claveDts,clienteDts, marcaDts, modeloImpresoraDts, modeloCartuchoDts, numeroSerieDts))
                {
                getWindow().showNotification("Modificación...","Información procesada correctamente",Notification.TYPE_TRAY_NOTIFICATION);
                cargarTabla(); cargarTabla();
                }
            else
                {getWindow().showNotification("Modificación...",logica.getError(),Notification.TYPE_WARNING_MESSAGE);}
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    
    private void agregarInformacion()
        {
        try
            {
            String clienteDts           = (String)cliente.getValue();
            String marcaDts             =  marca.getSelectedKey();
            String modeloImpresoraDts   = (String)modeloImpresora.getValue();
            String modeloCartuchoDts    = (String)modeloCartucho.getValue();
            String numeroSerieDts       = (String)numeroSerie.getValue();
            if(logica.agregarObjeto(clienteDts,marcaDts, modeloImpresoraDts, modeloCartuchoDts, numeroSerieDts))
                {
                clave.setValue("");
                marca.setValue("");
                modeloImpresora.setValue("");
                modeloCartucho.setValue("");
                numeroSerie.setValue("");
                getWindow().showNotification("Agregar...","Información procesada correctamente",Notification.TYPE_TRAY_NOTIFICATION);
                cargarTabla(); cargarTabla();
                }
            else
                {getWindow().showNotification("Agregar...",logica.getError(),Notification.TYPE_WARNING_MESSAGE);}
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    }
